package com.huashi.dealer.modular.business.order.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huashi.dealer.commonEntity.Order;
import com.huashi.dealer.commonEntity.OrderExpress;
import com.huashi.dealer.modular.business.order.param.*;
import org.springframework.stereotype.Service;

/**
 * API订单Service接口
 *
 * @author 谭陈强
 * @since 2025-07-30
 */
@Service
public interface OrderService extends IService<Order> {

    /**
     * 获取购物车订单
     *
     * @param cartIds 购物车ID列表
     * @param payType 支付类型：10基本账户，30返利账户，40核销账户
     * @param source 来源：10普通订单，30返利订单，40核销订单
     * @return 购物车订单信息
     */
    OrderResponseParam getCartOrder(String cartIds, String payType, String source);

    /**
     * 立即购买
     *
     * @param requestParam 请求参数
     * @return 订单信息
     */
    OrderResponseParam buyNow(OrderRequestParam requestParam);

    /**
     * 提交订单（购物车结算）
     *
     * @param requestParam 请求参数
     * @return 订单信息
     */
    OrderResponseParam submitOrder(OrderRequestParam requestParam);

    OrderResponseParam submitOrder2(OrderRequestParam requestParam);
    /**
     * 获取订单列表
     *
     * @param dataType 数据类型：all全部，audit审核中，reject驳回，delivery待发货，partorder部分发货，received待收货，comment已完成
     * @param source   来源：10基本账户，30返利账户，40核销账户
     * @param time     时间：10当月，20季度，30年度
     *                 //     * @param isStoreType 是否是业务员：0经销商，1业务员
     * @param page
     * @return 订单列表
     */
    Page<OrderListVo> getOrderList(String dataType, Integer source, Integer time, Page<Order> page);

    /**
     * 获取订单详情
     *
     * @param orderId 订单ID
     * @return 订单详情
     */
    OrderDetailVo getOrderDetail(Long orderId);

    /**
     * 取消订单
     *
     * @param orderId 订单ID
     */
    void cancelOrder(Long orderId);

    /**
     * 确认收货
     *
     * @param orderId 订单ID
     * @param token 用户令牌
     */
    void confirmOrder(Long orderId, String token);

    /**
     * 删除订单
     *
     * @param orderId 订单ID
     * @param token 用户令牌
     */
    void deleteOrder(Long orderId, String token);

    /**
     * 订单支付
     *
     * @param orderId 订单ID
     * @param requestParam 请求参数
     * @return 支付信息
     */
    OrderResponseParam payOrder(Long orderId, OrderRequestParam requestParam);

    /**
     * 获取订单统计
     *
     * @param token 用户令牌
     * @return 订单统计
     */
    OrderResponseParam getOrderStatistics(String token);

    /**
     * 订单审核
     *
     * @param orderId 订单ID
     * @param auditStatus 审核状态（0待审核，10已驳回，20已通过）
     * @param rejectReason 驳回原因（可选）
     */
    void auditOrder(Long orderId,Integer auditStatus, String rejectReason);

    /**
     * 获取订单物流信息
     *
     * @param orderId 订单ID
     * @param page 分页
     * @return 物流信息
     */
    Page<OrderExpressVo> getOrderExpress(Long orderId,Page<OrderExpress> page);

    /**
     * 确认收货
     *
     * @param orderId 订单ID
     * @param status 收货状态：20全部收货，30部分收货
     * @param orderExpressId 物流ID，英文逗号分隔（可选）
     */
    void confirmReceipt(Long orderId, Integer status, String orderExpressId);

    /**
     * 业务员取消订单
     *
     * @param orderId 订单ID
     * @param status 状态：20同意取消，10驳回
     */
    void salesmanCancel(Long orderId, Integer status,String rejectReason);

    /**
     * 获取购物车订单结算预览信息
     * 对应PHP项目/order/cart接口的GET请求功能
     *
     * @param cartIds     购物车ID列表，格式：goods_id_goods_sku_id，多个用逗号分隔
     * @param isGoodsType 商品类型：10普通订单，30返利订单，40核销订单
     * @param payType     支付方式：10余额支付，20微信支付
     * @param source      订单来源：10普通订单，30返利订单，40核销订单
     * @return 订单结算预览信息
     */
    CartOrderPreviewResponseParam getCartOrderPreview(String cartIds, Integer isGoodsType, Integer payType, Integer source);
}